package cn.iocoder.yudao.module.diy.service.diy;

import cn.hutool.json.JSONObject;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.diy.controller.admin.diy.vo.other.DiyPageInitParam;
import cn.iocoder.yudao.module.diy.controller.admin.diy.vo.other.DiyPageParam;
import cn.iocoder.yudao.module.diy.controller.admin.diy.vo.other.NsDiyPageRespVo;
import cn.iocoder.yudao.module.diy.controller.admin.diy.vo.other.StartUpPageConfigParam;
import cn.iocoder.yudao.module.diy.controller.admin.diy.vo.page.DiyPagePageReqVO;
import cn.iocoder.yudao.module.diy.controller.admin.page.vo.PagePageReqVO;
import cn.iocoder.yudao.module.diy.dal.diy.DiyPageSearchParam;
import cn.iocoder.yudao.module.diy.dal.diy.SetDiyDataParam;
import cn.iocoder.yudao.module.diy.dal.diy.TemplateParam;
import cn.iocoder.yudao.module.diy.enums.SceneDomainVo;

import java.util.List;

/**
 * 自定义页面服务接口类
 */
public interface IDiyService {

    /**
     * 自定义页面列表
     *
     * @param pageReqVO 分页参数
     * @return PageResult<DiyPageListedVo>
     */
    PageResult<NsDiyPageRespVo> nsPageList(DiyPagePageReqVO pageReqVO);

    /**
     * 自定义页面列表
     * @param pageVO
     */
    List<NsDiyPageRespVo> allList(DiyPagePageReqVO pageVO);

    /**
     * 自定义页面详情
     *
     * @param id 主键ID
     * @return DiyPageInfoVo
     */
    NsDiyPageRespVo info(Long id);

    /**
     * 自定义页面详情
     *
     * @param name
     * @return
     */
    NsDiyPageRespVo infoByName(String name);

    /**
     * 自定义页面添加
     *
     * @param param 参数
     */
    void syncAdd(DiyPageParam param);
    Long add(DiyPageParam param);

    /**
     * 自定义页面编辑
     *
     * @param id 参数
     */
    void edit(Long id, DiyPageParam editParam);

    /**Integer id
     * 自定义页面删除
     *
     * @param id 主键ID
     */
    void del(Long id);

    /**
     * 设为使用
     *
     * @param id 主键ID
     */
    void setUse(Long id);

    /**
     * 获取自定义链接列表
     *
     * @return
     */
    JSONObject getLink();

    /**
     * 获取页面初始化数据
     * @param param
     */
    NsDiyPageRespVo getPageInit(DiyPageInitParam param);

    SceneDomainVo getSceneDomain();

    JSONObject getComponentList(String type);

    /**
     * 获取默认页面数据
     *
     * @param type
     * @param addon
     * @return
     */
    JSONObject getFirstPageData(String type, String addon);

    /**
     * 获取页面模板
     *
     * @return
     */
    JSONObject getTemplate(TemplateParam param);

    /**
     * 设置启动页
     * @param value
     */
    void changeTemplate(StartUpPageConfigParam value);
//
    /**
     * 获取装修页面列表
     * @param searchParam
     */
    JSONObject getDecoratePage(DiyPageSearchParam searchParam);

    /**
     * 自定义页面分页列表，轮播搜索组件用
     */
    PageResult<NsDiyPageRespVo> getPageByCarouselSearch(PagePageReqVO pageReqVO) ;

    /**
     * 设置 首页/个人中心 的第一个模板 设置为启动页
     * @param param
     */
    void setDiyData(SetDiyDataParam param);

    /**
     * 复制
     * @param id
     */
    void copy(Integer id);
}
